home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 February (DVD) / PCWorld_2008-02_DVD.iso / v cisle / PHP / PHP.exe / xampp-win32-1.6.5-installer.exe / phpMyAdmin / export.php < prev    next >
Encoding:
PHP Script  |  2007-12-20  |  23.6 KB  |  672 lines

  1. <?php
  2. /* vim: set expandtab sw=4 ts=4 sts=4: */
  3. /**
  4.  * @todo    too much die here, or?
  5.  * @version $Id: export.php 10914 2007-11-10 15:20:59Z lem9 $
  6.  */
  7.  
  8. /**
  9.  * Get the variables sent or posted to this script and a core script
  10.  */
  11. require_once './libraries/common.inc.php';
  12. require_once './libraries/zip.lib.php';
  13. require_once './libraries/plugin_interface.lib.php';
  14.  
  15. PMA_checkParameters(array('what', 'export_type'));
  16.  
  17. // Scan plugins
  18. $export_list = PMA_getPlugins('./libraries/export/', array('export_type' => $export_type, 'single_table' => isset($single_table)));
  19.  
  20. // Backward compatbility
  21. $type = $what;
  22.  
  23. // Check export type
  24. if (!isset($export_list[$type])) {
  25.     die('Bad type!');
  26. }
  27.  
  28. /**
  29.  * valid compression methods
  30.  */
  31. $compression_methods = array(
  32.     'zip',
  33.     'gzip',
  34.     'bzip',
  35. );
  36.  
  37. /**
  38.  * init and variable checking
  39.  */
  40. $compression = false;
  41. $onserver = false;
  42. $save_on_server = false;
  43. $buffer_needed = false;
  44. if (empty($_REQUEST['asfile'])) {
  45.     $asfile = false;
  46. } else {
  47.     $asfile = true;
  48.     if (in_array($_REQUEST['compression'], $compression_methods)) {
  49.         $compression = $_REQUEST['compression'];
  50.         $buffer_needed = true;
  51.     }
  52.     if (!empty($_REQUEST['onserver'])) {
  53.         $onserver = $_REQUEST['onserver'];
  54.         // Will we save dump on server?
  55.         $save_on_server = ! empty($cfg['SaveDir']) && $onserver;
  56.     }
  57. }
  58.  
  59. // Does export require to be into file?
  60. if (isset($export_list[$type]['force_file']) && ! $asfile) {
  61.     $message = $strExportMustBeFile;
  62.     $GLOBALS['show_error_header'] = true;
  63.     $js_to_run = 'functions.js';
  64.     require_once './libraries/header.inc.php';
  65.     if ($export_type == 'server') {
  66.         $active_page = 'server_export.php';
  67.         require './server_export.php';
  68.     } elseif ($export_type == 'database') {
  69.         $active_page = 'db_export.php';
  70.         require './db_export.php';
  71.     } else {
  72.         $active_page = 'tbl_export.php';
  73.         require './tbl_export.php';
  74.     }
  75.     exit();
  76. }
  77.  
  78. // Generate error url and check for needed variables
  79. if ($export_type == 'server') {
  80.     $err_url = 'server_export.php?' . PMA_generate_common_url();
  81. } elseif ($export_type == 'database' && strlen($db)) {
  82.     $err_url = 'db_export.php?' . PMA_generate_common_url($db);
  83.     // Check if we have something to export
  84.     if (isset($table_select)) {
  85.         $tables = $table_select;
  86.     } else {
  87.         $tables = array();
  88.     }
  89. } elseif ($export_type == 'table' && strlen($db) && strlen($table)) {
  90.     $err_url = 'tbl_export.php?' . PMA_generate_common_url($db, $table);
  91. } else {
  92.     die('Bad parameters!');
  93. }
  94.  
  95. // Get the functions specific to the export type
  96. require './libraries/export/' . PMA_securePath($type) . '.php';
  97.  
  98. /**
  99.  * Increase time limit for script execution and initializes some variables
  100.  */
  101. @set_time_limit($cfg['ExecTimeLimit']);
  102. if (!empty($cfg['MemoryLimit'])) {
  103.     @ini_set('memory_limit', $cfg['MemoryLimit']);
  104. }
  105.  
  106. // Start with empty buffer
  107. $dump_buffer = '';
  108. $dump_buffer_len = 0;
  109.  
  110. // We send fake headers to avoid browser timeout when buffering
  111. $time_start = time();
  112.  
  113.  
  114. /**
  115.  * Output handler for all exports, if needed buffering, it stores data into
  116.  * $dump_buffer, otherwise it prints thems out.
  117.  *
  118.  * @param   string  the insert statement
  119.  *
  120.  * @return  bool    Whether output suceeded
  121.  */
  122. function PMA_exportOutputHandler($line)
  123. {
  124.     global $time_start, $dump_buffer, $dump_buffer_len, $save_filename;
  125.  
  126.     // Kanji encoding convert feature
  127.     if ($GLOBALS['output_kanji_conversion']) {
  128.         $line = PMA_kanji_str_conv($line, $GLOBALS['knjenc'], isset($GLOBALS['xkana']) ? $GLOBALS['xkana'] : '');
  129.     }
  130.     // If we have to buffer data, we will perform everything at once at the end
  131.     if ($GLOBALS['buffer_needed']) {
  132.  
  133.         $dump_buffer .= $line;
  134.         if ($GLOBALS['onfly_compression']) {
  135.  
  136.             $dump_buffer_len += strlen($line);
  137.  
  138.             if ($dump_buffer_len > $GLOBALS['memory_limit']) {
  139.                 if ($GLOBALS['output_charset_conversion']) {
  140.                     $dump_buffer = PMA_convert_string($GLOBALS['charset'], $GLOBALS['charset_of_file'], $dump_buffer);
  141.                 }
  142.                 // as bzipped
  143.                 if ($GLOBALS['compression'] == 'bzip'  && @function_exists('bzcompress')) {
  144.                     $dump_buffer = bzcompress($dump_buffer);
  145.                 }
  146.                 // as a gzipped file
  147.                 elseif ($GLOBALS['compression'] == 'gzip' && @function_exists('gzencode')) {
  148.                     // without the optional parameter level because it bug
  149.                     $dump_buffer = gzencode($dump_buffer);
  150.                 }
  151.                 if ($GLOBALS['save_on_server']) {
  152.                     $write_result = @fwrite($GLOBALS['file_handle'], $dump_buffer);
  153.                     if (!$write_result || ($write_result != strlen($dump_buffer))) {
  154.                         $GLOBALS['message'] = sprintf($GLOBALS['strNoSpace'], htmlspecialchars($save_filename));
  155.                         $GLOBALS['show_error_header'] = true;
  156.                         return false;
  157.                     }
  158.                 } else {
  159.                     echo $dump_buffer;
  160.                 }
  161.                 $dump_buffer = '';
  162.                 $dump_buffer_len = 0;
  163.             }
  164.         } else {
  165.             $time_now = time();
  166.             if ($time_start >= $time_now + 30) {
  167.                 $time_start = $time_now;
  168.                 header('X-pmaPing: Pong');
  169.             } // end if
  170.         }
  171.     } else {
  172.         if ($GLOBALS['asfile']) {
  173.             if ($GLOBALS['output_charset_conversion']) {
  174.                 $line = PMA_convert_string($GLOBALS['charset'], $GLOBALS['charset_of_file'], $line);
  175.             }
  176.             if ($GLOBALS['save_on_server'] && strlen($line) > 0) {
  177.                 $write_result = @fwrite($GLOBALS['file_handle'], $line);
  178.                 if (!$write_result || ($write_result != strlen($line))) {
  179.                     $GLOBALS['message'] = sprintf($GLOBALS['strNoSpace'], htmlspecialchars($save_filename));
  180.                     $GLOBALS['show_error_header'] = true;
  181.                     return false;
  182.                 }
  183.                 $time_now = time();
  184.                 if ($time_start >= $time_now + 30) {
  185.                     $time_start = $time_now;
  186.                     header('X-pmaPing: Pong');
  187.                 } // end if
  188.             } else {
  189.                 // We export as file - output normally
  190.                 echo $line;
  191.             }
  192.         } else {
  193.             // We export as html - replace special chars
  194.             echo htmlspecialchars($line);
  195.         }
  196.     }
  197.     return true;
  198. } // end of the 'PMA_exportOutputHandler()' function
  199.  
  200. // Defines the default <CR><LF> format. For SQL always use \n as MySQL wants this on all platforms.
  201. if ($what == 'sql') {
  202.     $crlf = "\n";
  203. } else {
  204.     $crlf = PMA_whichCrlf();
  205. }
  206.  
  207. $output_kanji_conversion = function_exists('PMA_kanji_str_conv') && $type != 'xls';
  208.  
  209. // Do we need to convert charset?
  210. $output_charset_conversion = $asfile &&
  211.     $cfg['AllowAnywhereRecoding'] && $allow_recoding
  212.     && isset($charset_of_file) && $charset_of_file != $charset
  213.     && $type != 'xls';
  214.  
  215. // Use on fly compression?
  216. $onfly_compression = $GLOBALS['cfg']['CompressOnFly'] && ($compression == 'gzip' | $compression == 'bzip');
  217. if ($onfly_compression) {
  218.     $memory_limit = trim(@ini_get('memory_limit'));
  219.     // 2 MB as default
  220.     if (empty($memory_limit)) {
  221.         $memory_limit = 2 * 1024 * 1024;
  222.     }
  223.  
  224.     if (strtolower(substr($memory_limit, -1)) == 'm') {
  225.         $memory_limit = (int)substr($memory_limit, 0, -1) * 1024 * 1024;
  226.     } elseif (strtolower(substr($memory_limit, -1)) == 'k') {
  227.         $memory_limit = (int)substr($memory_limit, 0, -1) * 1024;
  228.     } elseif (strtolower(substr($memory_limit, -1)) == 'g') {
  229.         $memory_limit = (int)substr($memory_limit, 0, -1) * 1024 * 1024 * 1024;
  230.     } else {
  231.         $memory_limit = (int)$memory_limit;
  232.     }
  233.  
  234.     // Some of memory is needed for other thins and as treshold.
  235.     // Nijel: During export I had allocated (see memory_get_usage function)
  236.     //        approx 1.2MB so this comes from that.
  237.     if ($memory_limit > 1500000) {
  238.         $memory_limit -= 1500000;
  239.     }
  240.  
  241.     // Some memory is needed for compression, assume 1/3
  242.     $memory_limit /= 8;
  243. }
  244.  
  245. // Generate filename and mime type if needed
  246. if ($asfile) {
  247.     $pma_uri_parts = parse_url($cfg['PmaAbsoluteUri']);
  248.     if ($export_type == 'server') {
  249.         if (isset($remember_template)) {
  250.             PMA_setCookie('pma_server_filename_template', $filename_template);
  251.         }
  252.         $filename = str_replace('__SERVER__', $GLOBALS['cfg']['Server']['host'], strftime($filename_template));
  253.     } elseif ($export_type == 'database') {
  254.         if (isset($remember_template)) {
  255.             PMA_setCookie('pma_db_filename_template', $filename_template);
  256.         }
  257.         $filename = str_replace('__DB__', $db, str_replace('__SERVER__', $GLOBALS['cfg']['Server']['host'], strftime($filename_template)));
  258.     } else {
  259.         if (isset($remember_template)) {
  260.             PMA_setCookie('pma_table_filename_template', $filename_template);
  261.         }
  262.         $filename = str_replace('__TABLE__', $table, str_replace('__DB__', $db, str_replace('__SERVER__', $GLOBALS['cfg']['Server']['host'], strftime($filename_template))));
  263.     }
  264.  
  265.     // convert filename to iso-8859-1, it is safer
  266.     if (!(isset($cfg['AllowAnywhereRecoding']) && $cfg['AllowAnywhereRecoding'] && $allow_recoding)) {
  267.         $filename = PMA_convert_string($charset, 'iso-8859-1', $filename);
  268.     } else {
  269.         $filename = PMA_convert_string($convcharset, 'iso-8859-1', $filename);
  270.     }
  271.  
  272.     // Grab basic dump extension and mime type
  273.     $filename  .= '.' . $export_list[$type]['extension'];
  274.     $mime_type  = $export_list[$type]['mime_type'];
  275.  
  276.     // If dump is going to be compressed, set correct encoding or mime_type and add
  277.     // compression to extension
  278.     $content_encoding = '';
  279.     if ($compression == 'bzip') {
  280.         $filename  .= '.bz2';
  281.         // browsers don't like this:
  282.         //$content_encoding = 'x-bzip2';
  283.         $mime_type = 'application/x-bzip2';
  284.     } elseif ($compression == 'gzip') {
  285.         $filename  .= '.gz';
  286.         // Needed to avoid recompression by server modules like mod_gzip.
  287.         // It seems necessary to check about zlib.output_compression
  288.         // to avoid compressing twice
  289.         if (!@ini_get('zlib.output_compression')) {
  290.             $content_encoding = 'x-gzip';
  291.             $mime_type = 'application/x-gzip';
  292.         }
  293.     } elseif ($compression == 'zip') {
  294.         $filename  .= '.zip';
  295.         $mime_type = 'application/zip';
  296.     }
  297. }
  298.  
  299. // Open file on server if needed
  300. if ($save_on_server) {
  301.     $save_filename = PMA_userDir($cfg['SaveDir']) . preg_replace('@[/\\\\]@', '_', $filename);
  302.     unset($message);
  303.     if (file_exists($save_filename) && empty($onserverover)) {
  304.         $message = sprintf($strFileAlreadyExists, htmlspecialchars($save_filename));
  305.         $GLOBALS['show_error_header'] = true;
  306.     } else {
  307.         if (is_file($save_filename) && !is_writable($save_filename)) {
  308.             $message = sprintf($strNoPermission, htmlspecialchars($save_filename));
  309.             $GLOBALS['show_error_header'] = true;
  310.         } else {
  311.             if (!$file_handle = @fopen($save_filename, 'w')) {
  312.                 $message = sprintf($strNoPermission, htmlspecialchars($save_filename));
  313.                 $GLOBALS['show_error_header'] = true;
  314.             }
  315.         }
  316.     }
  317.     if (isset($message)) {
  318.         $js_to_run = 'functions.js';
  319.         require_once './libraries/header.inc.php';
  320.         if ($export_type == 'server') {
  321.             $active_page = 'server_export.php';
  322.             require './server_export.php';
  323.         } elseif ($export_type == 'database') {
  324.             $active_page = 'db_export.php';
  325.             require './db_export.php';
  326.         } else {
  327.             $active_page = 'tbl_export.php';
  328.             require './tbl_export.php';
  329.         }
  330.         exit();
  331.     }
  332. }
  333.  
  334. /**
  335.  * Send headers depending on whether the user chose to download a dump file
  336.  * or not
  337.  */
  338. if (!$save_on_server) {
  339.     if ($asfile) {
  340.         // Download
  341.         if (!empty($content_encoding)) {
  342.             header('Content-Encoding: ' . $content_encoding);
  343.         }
  344.         header('Content-Type: ' . $mime_type);
  345.         header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
  346.         // lem9: Tested behavior of
  347.         //       IE 5.50.4807.2300
  348.         //       IE 6.0.2800.1106 (small glitch, asks twice when I click Open)
  349.         //       IE 6.0.2900.2180
  350.         //       Firefox 1.0.6
  351.         // in http and https
  352.         header('Content-Disposition: attachment; filename="' . $filename . '"');
  353.         if (PMA_USR_BROWSER_AGENT == 'IE') {
  354.             header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  355.             header('Pragma: public');
  356.         } else {
  357.             header('Pragma: no-cache');
  358.         }
  359.     } else {
  360.         // HTML
  361.         if ($export_type == 'database') {
  362.             $num_tables = count($tables);
  363.             if ($num_tables == 0) {
  364.                 $message = $strNoTablesFound;
  365.                 $js_to_run = 'functions.js';
  366.                 require_once './libraries/header.inc.php';
  367.                 $active_page = 'db_export.php';
  368.                 require './db_export.php';
  369.                 exit();
  370.             }
  371.         }
  372.         $backup_cfgServer = $cfg['Server'];
  373.         require_once './libraries/header.inc.php';
  374.         $cfg['Server'] = $backup_cfgServer;
  375.         unset($backup_cfgServer);
  376.         echo "\n" . '<div align="' . $cell_align_left . '">' . "\n";
  377.         //echo '    <pre>' . "\n";
  378.         echo '    <form name="nofunction">' . "\n"
  379.            // remove auto-select for now: there is no way to select
  380.            // only a part of the text; anyway, it should obey
  381.            // $cfg['TextareaAutoSelect']
  382.            //. '        <textarea name="sqldump" cols="50" rows="30" onclick="this.select();" id="textSQLDUMP" wrap="OFF">' . "\n";
  383.            . '        <textarea name="sqldump" cols="50" rows="30" id="textSQLDUMP" wrap="OFF">' . "\n";
  384.     } // end download
  385. }
  386.  
  387. // Fake loop just to allow skip of remain of this code by break, I'd really
  388. // need exceptions here :-)
  389. do {
  390.  
  391. // Add possibly some comments to export
  392. if (!PMA_exportHeader()) {
  393.     break;
  394. }
  395.  
  396. // Will we need relation & co. setup?
  397. $do_relation = isset($GLOBALS[$what . '_relation']);
  398. $do_comments = isset($GLOBALS[$what . '_comments']);
  399. $do_mime     = isset($GLOBALS[$what . '_mime']);
  400. if ($do_relation || $do_comments || $do_mime) {
  401.     require_once './libraries/relation.lib.php';
  402.     $cfgRelation = PMA_getRelationsParam();
  403. }
  404. if ($do_mime) {
  405.     require_once './libraries/transformations.lib.php';
  406. }
  407.  
  408. // Include dates in export?
  409. $do_dates   = isset($GLOBALS[$what . '_dates']);
  410.  
  411. /**
  412.  * Builds the dump
  413.  */
  414. // Gets the number of tables if a dump of a database has been required
  415. if ($export_type == 'server') {
  416.     if (isset($db_select)) {
  417.         $tmp_select = implode($db_select, '|');
  418.         $tmp_select = '|' . $tmp_select . '|';
  419.     }
  420.     // Walk over databases
  421.     foreach ($GLOBALS['PMA_List_Database']->items as $current_db) {
  422.         if ((isset($tmp_select) && strpos(' ' . $tmp_select, '|' . $current_db . '|'))
  423.             || !isset($tmp_select)) {
  424.             if (!PMA_exportDBHeader($current_db)) {
  425.                 break 2;
  426.             }
  427.             if (!PMA_exportDBCreate($current_db)) {
  428.                 break 2;
  429.             }
  430.             $tables = PMA_DBI_get_tables($current_db);
  431.             $views = array();
  432.             foreach ($tables as $table) {
  433.                 // if this is a view, collect it for later; views must be exported
  434.                 // after the tables
  435.                 $is_view = PMA_Table::isView($current_db, $table);
  436.                 if ($is_view) {
  437.                     $views[] = $table;
  438.                 }
  439.                 if (isset($GLOBALS[$what . '_structure'])) {
  440.                     // for a view, export a stand-in definition of the table
  441.                     // to resolve view dependencies
  442.                     if (!PMA_exportStructure($current_db, $table, $crlf, $err_url, $do_relation, $do_comments, $do_mime, $do_dates, $is_view ? 'stand_in' : 'create_table', $export_type)) {
  443.                         break 3;
  444.                     }
  445.                 }
  446.                 if (isset($GLOBALS[$what . '_data']) && ! $is_view) {
  447.                     $local_query  = 'SELECT * FROM ' . PMA_backquote($current_db) . '.' . PMA_backquote($table);
  448.                     if (!PMA_exportData($current_db, $table, $crlf, $err_url, $local_query)) {
  449.                         break 3;
  450.                     }
  451.                 }
  452.             }
  453.             foreach($views as $view) {
  454.                 // no data export for a view
  455.                 if (isset($GLOBALS[$what . '_structure'])) {
  456.                     if (!PMA_exportStructure($current_db, $view, $crlf, $err_url, $do_relation, $do_comments, $do_mime, $do_dates, 'create_view', $export_type)) {
  457.                         break 3;
  458.                     }
  459.                 }
  460.             }
  461.             if (!PMA_exportDBFooter($current_db)) {
  462.                 break 2;
  463.             }
  464.         }
  465.     }
  466. } elseif ($export_type == 'database') {
  467.     if (!PMA_exportDBHeader($db)) {
  468.         break;
  469.     }
  470.     $i = 0;
  471.     $views = array();
  472.     // $tables contains the choices from the user (via $table_select)
  473.     foreach ($tables as $table) {
  474.         // if this is a view, collect it for later; views must be exported after
  475.         // the tables
  476.         $is_view = PMA_Table::isView($db, $table);
  477.         if ($is_view) {
  478.             $views[] = $table;
  479.         }
  480.         if (isset($GLOBALS[$what . '_structure'])) {
  481.             // for a view, export a stand-in definition of the table
  482.             // to resolve view dependencies
  483.             if (!PMA_exportStructure($db, $table, $crlf, $err_url, $do_relation, $do_comments, $do_mime, $do_dates, $is_view ? 'stand_in' : 'create_table', $export_type)) {
  484.                 break 2;
  485.             }
  486.         }
  487.         if (isset($GLOBALS[$what . '_data']) && ! $is_view) {
  488.             $local_query  = 'SELECT * FROM ' . PMA_backquote($db) . '.' . PMA_backquote($table);
  489.             if (!PMA_exportData($db, $table, $crlf, $err_url, $local_query)) {
  490.                 break 2;
  491.             }
  492.         }
  493.     }
  494.     foreach ($views as $view) {
  495.         // no data export for a view
  496.         if (isset($GLOBALS[$what . '_structure'])) {
  497.             if (!PMA_exportStructure($db, $view, $crlf, $err_url, $do_relation, $do_comments, $do_mime, $do_dates, 'create_view', $export_type)) {
  498.                 break 2;
  499.             }
  500.         }
  501.     }
  502.  
  503.     if (!PMA_exportDBFooter($db)) {
  504.         break;
  505.     }
  506. } else {
  507.     if (!PMA_exportDBHeader($db)) {
  508.         break;
  509.     }
  510.     // We export just one table
  511.  
  512.     if ($limit_to > 0 && $limit_from >= 0) {
  513.         $add_query  = ' LIMIT '
  514.                     . (($limit_from > 0) ? $limit_from . ', ' : '')
  515.                     . $limit_to;
  516.     } else {
  517.         $add_query  = '';
  518.     }
  519.  
  520.     $is_view = PMA_Table::isView($db, $table);
  521.     if (isset($GLOBALS[$what . '_structure'])) {
  522.         if (!PMA_exportStructure($db, $table, $crlf, $err_url, $do_relation, $do_comments, $do_mime, $do_dates, $is_view ? 'create_view' : 'create_table', $export_type)) {
  523.             break;
  524.         }
  525.     }
  526.     // If this is an export of a single view, we have to export data;
  527.     // for example, a PDF report
  528.     if (isset($GLOBALS[$what . '_data'])) {
  529.         if (!empty($sql_query)) {
  530.             // only preg_replace if needed
  531.             if (!empty($add_query)) {
  532.                 // remove trailing semicolon before adding a LIMIT
  533.                 $sql_query = preg_replace('%;\s*$%', '', $sql_query);
  534.             }
  535.             $local_query = $sql_query . $add_query;
  536.             PMA_DBI_select_db($db);
  537.         } else {
  538.             $local_query  = 'SELECT * FROM ' . PMA_backquote($db) . '.' . PMA_backquote($table) . $add_query;
  539.         }
  540.         if (!PMA_exportData($db, $table, $crlf, $err_url, $local_query)) {
  541.             break;
  542.         }
  543.     }
  544.     if (!PMA_exportDBFooter($db)) {
  545.         break;
  546.     }
  547. }
  548. if (!PMA_exportFooter()) {
  549.     break;
  550. }
  551.  
  552. } while (false);
  553. // End of fake loop
  554.  
  555. if ($save_on_server && isset($message)) {
  556.     $js_to_run = 'functions.js';
  557.     require_once './libraries/header.inc.php';
  558.     if ($export_type == 'server') {
  559.         $active_page = 'server_export.php';
  560.         require './server_export.php';
  561.     } elseif ($export_type == 'database') {
  562.         $active_page = 'db_export.php';
  563.         require './db_export.php';
  564.     } else {
  565.         $active_page = 'tbl_export.php';
  566.         require './tbl_export.php';
  567.     }
  568.     exit();
  569. }
  570.  
  571. /**
  572.  * Send the dump as a file...
  573.  */
  574. if (!empty($asfile)) {
  575.     // Convert the charset if required.
  576.     if ($output_charset_conversion) {
  577.         $dump_buffer = PMA_convert_string($GLOBALS['charset'], $GLOBALS['charset_of_file'], $dump_buffer);
  578.     }
  579.  
  580.     // Do the compression
  581.     // 1. as a gzipped file
  582.     if ($compression == 'zip') {
  583.         if (@function_exists('gzcompress')) {
  584.             $zipfile = new zipfile();
  585.             $zipfile -> addFile($dump_buffer, substr($filename, 0, -4));
  586.             $dump_buffer = $zipfile -> file();
  587.         }
  588.     }
  589.     // 2. as a bzipped file
  590.     elseif ($compression == 'bzip') {
  591.         if (@function_exists('bzcompress')) {
  592.             $dump_buffer = bzcompress($dump_buffer);
  593.             if ($dump_buffer === -8) {
  594.                 require_once './libraries/header.inc.php';
  595.                 echo sprintf($strBzError, '<a href="http://bugs.php.net/bug.php?id=17300" target="_blank">17300</a>');
  596.                 require_once './libraries/footer.inc.php';
  597.             }
  598.         }
  599.     }
  600.     // 3. as a gzipped file
  601.     elseif ($compression == 'gzip') {
  602.         if (@function_exists('gzencode')) {
  603.             // without the optional parameter level because it bug
  604.             $dump_buffer = gzencode($dump_buffer);
  605.         }
  606.     }
  607.  
  608.     /* If ve saved on server, we have to close file now */
  609.     if ($save_on_server) {
  610.         $write_result = @fwrite($file_handle, $dump_buffer);
  611.         fclose($file_handle);
  612.         if (strlen($dump_buffer) !=0 && (!$write_result || ($write_result != strlen($dump_buffer)))) {
  613.             $message = sprintf($strNoSpace, htmlspecialchars($save_filename));
  614.         } else {
  615.             $message = sprintf($strDumpSaved, htmlspecialchars($save_filename));
  616.         }
  617.  
  618.         $js_to_run = 'functions.js';
  619.         require_once './libraries/header.inc.php';
  620.         if ($export_type == 'server') {
  621.             $active_page = 'server_export.php';
  622.             require_once './server_export.php';
  623.         } elseif ($export_type == 'database') {
  624.             $active_page = 'db_export.php';
  625.             require_once './db_export.php';
  626.         } else {
  627.             $active_page = 'tbl_export.php';
  628.             require_once './tbl_export.php';
  629.         }
  630.         exit();
  631.     } else {
  632.         echo $dump_buffer;
  633.     }
  634. }
  635. /**
  636.  * Displays the dump...
  637.  */
  638. else {
  639.     /**
  640.      * Close the html tags and add the footers in dump is displayed on screen
  641.      */
  642.     //echo '    </pre>' . "\n";
  643.     echo '</textarea>' . "\n"
  644.        . '    </form>' . "\n";
  645.     echo '</div>' . "\n";
  646.     echo "\n";
  647. ?>
  648. <script type="text/javascript">
  649. //<![CDATA[
  650.     var bodyWidth=null; var bodyHeight=null;
  651.     if (document.getElementById('textSQLDUMP')) {
  652.         bodyWidth  = self.innerWidth;
  653.         bodyHeight = self.innerHeight;
  654.         if (!bodyWidth && !bodyHeight) {
  655.             if (document.compatMode && document.compatMode == "BackCompat") {
  656.                 bodyWidth  = document.body.clientWidth;
  657.                 bodyHeight = document.body.clientHeight;
  658.             } else if (document.compatMode && document.compatMode == "CSS1Compat") {
  659.                 bodyWidth  = document.documentElement.clientWidth;
  660.                 bodyHeight = document.documentElement.clientHeight;
  661.             }
  662.         }
  663.         document.getElementById('textSQLDUMP').style.width=(bodyWidth-50) + 'px';
  664.         document.getElementById('textSQLDUMP').style.height=(bodyHeight-100) + 'px';
  665.     }
  666. //]]>
  667. </script>
  668. <?php
  669.     require_once './libraries/footer.inc.php';
  670. } // end if
  671. ?>
  672.